package 面试经典150题.哈希表;

import java.util.HashMap;
import java.util.Map;

/**
 * @author tmh
 * @date 2024/4/11 14:19
 * @description
 */
public class T290单词规律 {
    public boolean wordPattern(String pattern, String s) {
        String[] words = s.split(" ");
        //由于单词和模式是一一映射的 要是不相等就直接false
        if (pattern.length() != words.length) {
            return false;
        }
        //这个思路太顶了
                    /*
                如果key不存在，插入成功，返回null；如果key存在，返回之前对应的value。

                以pattern = "abba", str = "dog cat cat dog"为例，
                第1次：map.put('a',0)返回null，map.put("dog",0)返回null，两者相等；
                第2次：map.put('b',1)返回null，map.put("cat",1)返回null，两者相等；
                第3次：map.put('b',2)返回1，map.put("cat",2)返回1，两者相等；
                第4次：map.put('a',3)返回0，map.put("dog",3)返回0，两者相等，
                结果为 true。

                以pattern = "abba", str = "dog cat cat fish"为例，
                第1次：map.put('a',0)返回null，map.put("dog",0)返回null，两者相等；
                第2次：map.put('b',1)返回null，map.put("cat",1)返回null，两者相等；
                第3次：map.put('b',2)返回1，map.put("cat",2)返回1，两者相等；
                第4次：map.put('a',3)返回0，map.put("fish",3)返回null，两者不相等，
                结果为 false。
            */
        Map<Object,Integer> map = new HashMap();
        //这里不用Integer会报错
        for (Integer i = 0; i < words.length; i++) {
            if (map.put(pattern.charAt(i), i) != map.put(words[i], i)) {
                return false;
            }
        }
        return true;
    }
}
